package base_Suanfa.dongtaiguihua;
//给一个01矩阵，1代表是陆地，0代表海洋， 如果两个1相邻，那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
//岛屿: 相邻陆地可以组成一个岛屿（相邻:上下左右） 判断岛屿个数。
public class shen_sou {
    public static void main(String[] args) {
//        int a[][]={{0,0,0,0,0},{0,0,0,1,1},{0,0,0,1,1},{0,0,0,0,0},{0,0,1,1,1}};
        int a[][]={{0,0,1,1,1},{0,0,1,1,1},{0,0,1,1,1},{0,0,1,1,1}};
        int m=a.length;
        int n=a[0].length;
        int count=0;
        boolean visit[][]=new boolean[m][n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++)
            {
                visit[i][j]=true;
            }
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(visit[i][j]==true&&a[i][j]==1){
                    dfn(a,visit,i,j);
                    count++;
                }

            }
        }
        System.out.println(count);
    }
    public static void dfn(int a[][],boolean visit[][],int m,int n){
        if(m<0||m>=a.length||n<0||n>=a[0].length||visit[m][n]==false)
            return;
        visit[m][n]=false;
        if(a[m][n]==1){
            dfn(a,visit,m-1,n);
            dfn(a,visit,m+1,n);
            dfn(a,visit,m,n-1);
            dfn(a,visit,m,n+1);
        }
    }
}
